﻿using SupportLayer.Constantes.Outros;
using SupportLayer.Objetos.Usuario;
using SupportLayer.Util;
using SupportLayer.Util.ExtensionMethods;
using System;
using System.Collections.Generic;

namespace TranSys_Web.TranSys
{
  public partial class Cadastro : BasePage
  {
    protected void Page_Load(object sender, EventArgs e)
    {
      base.PageLoad();
    }

    public override void CarregaDados()
    {
    }

    protected void btnCadastrar_Click(object sender, EventArgs e)
    {
      try
      {
        lblErro.Text = "";
        ValidaCampos();

        UsuarioClass User = new UsuarioClass();
        User.Nome = txtNome.Text;
        User.Empresa = txtEmpresa.Text;
        User.Cargo = (txtCargo.Text.Equals(string.Empty) ? null : txtCargo.Text);
        User.Telefone = txtTelefone.Text;
        User.Email = txtEmail.Text;
        User.Login = txtLogin.Text;
        User.Senha = Criptografia.EncryptMd5(txtSenha.Text);
        User.VersaoAutoCad = chkUsaAutoCad.Checked ? ddlVersaoAutoCad.SelectedItem.Value : null;
        User.ComoConheceuTransys = ddlComoConheceuTransys.SelectedItem.Text;
        User.ReceberInfoTransys = chkReceberInfoTransys.Checked;
        User.DataCadastro = DateTime.Now;
        User.DataInativar = DateTime.Now.AddMonths(1);
        User.ConfirmouEmail = "N";

        if (!Banco.CheckEmail(User.Email))
          throw new ApplicationException("Este e-mail já está cadastrado no sistema!");

        if (!Banco.CheckUserName(User.Login))
          throw new ApplicationException("Este nome de usuário já está cadastrado no sistema!");

        User.ID = Convert.ToInt32(Banco.InsertUser(User));
        Session[OUTROS.USUARIO_ID] = User.ID;

        string auth = Criptografia.Encriptar
        (
          OUTROS.CHAVE,
          OUTROS.VETOR,
          User.ID.ToString() + "_TRANSYS_" + DateTime.Now.ToString()
        );

        string site = "virtualcad.com.br/transys/";
        string link = site + "confirmMail.aspx?" + OUTROS.AUTH + "=" + auth;

        string body = "<!doctype html><html><head><title>TranSys PLACA Web</title></head><body><p>Prezado Sr(a). " + txtNome.Text + ",</p><br /><h2 style=\"font-style:italic;\"><span style=\"font-family:trebuchet ms,helvetica,sans-serif;\">Seja bem-vindo ao <span style=\"color:#522963;\">Tran</span><span style=\"color:#F3BC23;\">Sys</span> <span style=\"color:#0066FF;\">PLACA Web</span>!</span></h2><hr /><p>O TranSys PLACA Web est&aacute; sendo&nbsp;disponibilizado temporariamente sem custo para voc&ecirc; efetuar o seu projeto de sinaliza&ccedil;&atilde;o Indicativa (POT).</p><br /><p><em><span style=\"font-size:18px;\">Pronto para come&ccedil;ar?</span></em><br /><br />Para ativar a sua conta, confirme o seu endere&ccedil;o de e-mail clicando no bot&atilde;o abaixo e come&ccedil;e agora mesmo a criar as suas placas de sinaliza&ccedil;&atilde;o.</p><br /><p><a href=\"" + link + "\"><span style=\"font-size:18px;\">Ativar&nbsp;Conta</span></a></p><br /><p>As placas geradas pelo TranSys PLACA Web est&atilde;o de acordo com a Vers&atilde;o Preliminar do Manual de Sinaliza&ccedil;&atilde;o Vertical de Indica&ccedil;&atilde;o do DENATRAN - Volume III.</p><br /><p>Para dicas e informa&ccedil;&otilde;es de uso, confira nosso Guia do Usu&aacute;rio (link).</p><br /><hr /><br /><p><span style=\"font-size:14px;\"><strong>TranSys &eacute; uma Marca Registrada da Virtual CAD Ltda. Todos os direitos s&atilde;o reservados.</strong></span></p></body></html>";

        EnviaEmail.SendMail
        (
          from: "transysplacaweb@gmail.com",
          to: new List<string>() { txtEmail.Text, "jbbotelho@gmail.com" },
          subject: "Transys PLACA Web - Ativação",
          body: body,
          isHtml: true
        );

        Response.Redirect("ObrigadoCadastro.aspx");
      }
      catch (Exception ex)
      {
        lblErro.Text = ex.Message;

      }
    }

    private void ValidaCampos()
    {
      #region Valida preenchimento

      List<string> Campos = new List<string>();

      if (txtNome.Text.Equals(string.Empty))
      {
        txtNome.AddCssClass("required");
        Campos.Add("Nome");
      }
      else
      {
        txtNome.RemoveCssClass("required");
        lblErro.Text = "";
      }

      if (txtEmpresa.Text.Equals(string.Empty))
      {
        txtEmpresa.AddCssClass("required");
        Campos.Add("Empresa");
      }
      else
      {
        txtEmpresa.RemoveCssClass("required");
        lblErro.Text = "";
      }

      if (txtTelefone.Text.Equals(string.Empty))
      {
        txtTelefone.AddCssClass("required");
        Campos.Add("Telefone");
      }
      else
      {
        txtTelefone.RemoveCssClass("required");
        lblErro.Text = "";
      }

      if (txtEmail.Text.Equals(string.Empty))
      {
        txtEmail.AddCssClass("required");
        Campos.Add("E-mail");
      }
      else
      {
        txtEmail.RemoveCssClass("required");
        lblErro.Text = "";
      }

      if (txtLogin.Text.Equals(string.Empty))
      {
        txtLogin.AddCssClass("required");
        Campos.Add("Login");
      }
      else
      {
        txtLogin.RemoveCssClass("required");
        lblErro.Text = "";
      }

      if (txtSenha.Text.Equals(string.Empty))
      {
        txtSenha.AddCssClass("required");
        Campos.Add("Senha");
      }
      else
      {
        txtSenha.RemoveCssClass("required");
        lblErro.Text = "";
      }

      if (chkUsaAutoCad.Checked)
        if (ddlVersaoAutoCad.SelectedValue == "0")
        {
          ddlVersaoAutoCad.AddCssClass("required");
          Campos.Add("Versão do AutoCad");
        }
        else
        {
          ddlVersaoAutoCad.RemoveCssClass("required");
          lblErro.Text = "";
        }

      if (txtConfirmarSenha.Text.Equals(string.Empty))
      {
        txtConfirmarSenha.AddCssClass("required");
        Campos.Add("Confirmar Senha");
      }
      else
      {
        txtConfirmarSenha.RemoveCssClass("required");
        lblErro.Text = "";
      }

      string erros = "";

      for (int x = 0; x < Campos.Count; x++)
      {
        if (x == 0)
          if (Campos.Count > 1)
            erros = "Os campos ";
          else
            erros = "O campo ";

        string e = (Campos.Count == 1) ? " " : "e ";

        erros += (x < Campos.Count - 1) ? Campos[x] + ", " : e + Campos[x] + " ";
      }

      if (Campos.Count > 0)
      {
        if (Campos.Count == 1)
          erros += "deve ser preenchido!";
        else
          erros += "devem ser preenchidos!";
        throw new ApplicationException(erros);
      }
      else
      {
        lblErro.Text = "";
      }

      #endregion Valida preenchimento

      #region Valida se as senhas digitadas conferem

      if (txtSenha.Text != txtConfirmarSenha.Text)
      {
        txtSenha.AddCssClass("required");
        txtConfirmarSenha.AddCssClass("required");

        throw new ApplicationException("Digite a senha corretamente no campo Confirmar Senha!");
      }
      else
      {
        txtSenha.RemoveCssClass("required");
        txtConfirmarSenha.RemoveCssClass("required");
        lblErro.Text = "";
      }

      #endregion Valida se as senhas digitadas conferem

      //#region Valida se o telefone digitado é válido
      //if (!txtTelefone.Text.isValidPhoneNumber())
      //{
      //  txtTelefone.AddCssClass("required");
      //  throw new ApplicationException("Digite um telefone válido!");
      //}
      //else
      //{
      //  txtTelefone.RemoveCssClass("required");
      //  lblErro.Text = "";
      //}
      //#endregion

      #region Valida se o email digitado é válido

      if (!txtEmail.Text.isValidEmail())
      {
        txtEmail.AddCssClass("required");
        throw new ApplicationException("Digite um e-mail válido!");
      }
      else
      {
        txtEmail.RemoveCssClass("required");
        lblErro.Text = "";
      }

      #endregion Valida se o email digitado é válido
    }
  }
}